/**
 * PerlaController - part of PerlaGis Architecture
 *
 * Copyright (C) 2010 Ricardo Gonzalez (gomnaz@gmail.com)
 * This program is free software: you can redistribute it and/or modify it under the
 * terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later version.
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
 * Public License for more details.
 * You should have received a copy of the GNU General Public License along with
 * this program. If not, see http://www.gnu.org/licenses/
 */
package org.perla.managers;

import java.util.List;
import javax.persistence.EntityManager;
import org.perla.entities.Nodo;
import org.perla.exceptions.NoNodeException;

/**
 * Classe statica che gestisce i nodi.
 * Implementa metodi che interrogano il database e metodi che risolvono i
 * problemi di ridonanza che causano errori lato server.
 * 
 * @author Ricardo Gonzalez
 * @author Eva Gjeci
 */
public class Node {

    /**
     * Rimuove la ridondanza dei nodi nei sensori appartenenti al nodo passato
     * come parametro.
     * @param n il nodo su cui opeerare
     */
    public static void clearRedudancy(Nodo n) {
        n.getSensoriList().clear();
    }

    /**
     * Rimuove la ridondanza dei nodi nei sensori appartenenti ai nodi presenti
     * nella lista passata come parametro.
     * @param l la lista su cui operare
     */
    public static void clearListRedudancy(List<Nodo> l) {
        for (Nodo n : l) {
            clearRedudancy(n);
        }
    }

    /**
     * Restituisce la lista di tutti i nodi presenti nel Perla
     * @param em l'entity manager del Perla
     * @return la lista dei nodi
     */
    public static List<Nodo> getAll(EntityManager em) {
        List<Nodo> l = em.createNamedQuery("Nodo.findAll").getResultList();
        clearListRedudancy(l);
        System.out.println("Test");
        return l;
    }

    /**
     * Restituisce il nodo per la chiave passata come parametro.
     * @param idNodo la chiave del nodo
     * @param em l'entity manager del Perla
     * @return il nodo
     * @throws NoNodeException se non esiste un nodo per la chiave indicata
     */
    public static Nodo get(String idNodo, EntityManager em) throws NoNodeException {
        Nodo n = em.find(Nodo.class, idNodo);
        if (n == null) {
            throw new NoNodeException();
        }
        clearRedudancy(n);
        return n;
    }
}
